// 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包，如：package main。
// package main 表示一个可独立执行的程序，每个 Go 应用程序都包含一个名为 main 的包。
package main

// 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包（的函数，或其他元素），fmt 包实现了格式化 IO（输入/输出）的函数。
import "fmt"

// 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的，一般来说都是在启动后第一个执行的函数（如果有 init() 函数则会先执行该函数）。
func main() {
	// fmt.Println(...) 可以将字符串输出到控制台，并在最后自动增加换行字符 \n。 
	// 使用 fmt.Print("hello, world\n") 可以得到相同的结果。 
	// Print 和 Println 这两个函数也支持使用变量，如：fmt.Println(arr)。如果没有特别指定，它们会以默认的打印格式将变量 arr 输出到控制台。
    fmt.Println("Hello, World!")
}

// 使用 // 来表示单行注释
// 使用 /* */ 表示多行注释，注释内容写在两个*号之间

// 当标识符（包括常量、变量、类型、函数名、结构字段等等）以一个大写字母开头，如：Group1，那么使用这种形式的标识符的对象就可以被外部包的代码所使用（客户端程序需要先导入这个包），
// 这被称为导出（像面向对象语言中的 public）；标识符如果以小写字母开头，则对包外是不可见的，但是他们在整个包的内部是可见并且可用的（像面向对象语言中的 protected ）。

/* 
编写代码完成后的运行：

使用 go run hello.go 运行代码
使用 go build hello.go 编译代码为二进制文件
会编译生成一个 hello 文件，在 windows 中应该会生成 exe 文件
运行（linux 中）：
```bash
./hello
```
*/

/*
需要注意的是 { 不能单独放在一行，所以以下代码在运行时会产生错误：
```go
package main

import "fmt"

func main()  
{  // 错误，{ 不能在单独的行上
    fmt.Println("Hello, World!")
}
```
*/